Use case: IRDA transmit in interrupt mode

This use case shows how to transmit IRDA data in interrupt mode. In HAL2, IRDA support is handled via the HAL UART driver.

Sequence diagram

    @startuml
    participant "Application" as p1
    participant "HAL IRDA driver" as p2
    participant "IRDAX_IRQHandler" as p3

    == initialization and configuration ==
    == IRDA HAL Transmit IT ==

    p1->p2: <color: green> HAL_IRDA_Transmit_IT(&hirda, aTxBuffer, DATA_TO_SEND_SIZE)
    note over p2 #00FF00
    Transmitting data ongoing
    end note
    p2-->p1: HAL_OK
    p3<-: IRDAX data interrupt
    p3->p2: HAL_IRDA_IRQHandler
    note over p2 #FFFF99
    All data (Size == hirda->TxXferCount) have been transmitted
    end note
    note over p2 #00FF00
    End of transmitting data
    end note
    p2->p1: HAL_IRDA_TxCpltCallback(hirda->TxXferCount)

    @enduml

Code snippet

HAL1

HAL2

#define DATA_TO_SEND_SIZE           256

uint8_t aTxBuffer[DATA_TO_SEND_SIZE] = " **** IRDA Communication **** ";

IRDA_HandleTypeDef hirda;

/* Optional: register transmit-complete callback */
HAL_IRDA_RegisterCallback(&hirda, HAL_IRDA_TX_CB_ID, IRDA_TxCpltCallback);

/* Start transmit in interrupt mode */
(void)HAL_IRDA_Transmit_IT(&hirda, aTxBuffer, DATA_TO_SEND_SIZE);
#define DATA_TO_SEND_SIZE           256

uint8_t aTxBuffer[DATA_TO_SEND_SIZE] = " **** IRDA Communication **** ";

hal_uart_handle_t huart;

/* Optional: register transmit-complete callback */
HAL_UART_RegisterTxCpltCallback(&huart, UART_TxCpltCallback);

/* Start transmit in interrupt mode */
(void)HAL_UART_Transmit_IT(&huart, aTxBuffer, DATA_TO_SEND_SIZE);

Key changes

  1. HAL2 uses the UART driver (HAL_UART_Transmit_IT() + HAL_UART_IRQHandler()) instead of IRDA-specific APIs.